﻿using System;
using System.Collections.Generic;

namespace DimensionsHelper.Common.Contracts.Metadata;

/// <summary>
///     描述使用MDM文档的用户信息，在 SaveLog 中使用。
/// </summary>
public interface IMdmUser
{
    /// <summary>
    ///     用户名
    /// </summary>
    string Name { get; }

    /// <summary>
    ///     文件版本号
    /// </summary>
    string FileVersion { get; }

    /// <summary>
    ///     注释信息
    /// </summary>
    string Comment { get; set; }
}

/// <summary>
///     MDM用户集合，可以使用此对象创建新的MDM用户。
/// </summary>
public interface IMdmUsers : IEnumerable<IMdmUser>
{
    /// <summary>
    ///     获取指定索引的MDM文档用户。
    /// </summary>
    /// <param name="index">指定索引</param>
    /// <returns>指定索引的MDM用户对象</returns>
    /// <exception cref="IndexOutOfRangeException"></exception>
    IMdmUser this[int index] { get; }

    /// <summary>
    ///     当前集合中的用户数量
    /// </summary>
    int Count { get; }

    /// <summary>
    ///     添加新的MDM文档用户，如果指定名称已存在，返回已有对象。
    /// </summary>
    /// <param name="name">指定用户名</param>
    /// <param name="fileVersion">指定文件版本</param>
    /// <param name="comment">追加的注释信息</param>
    /// <returns></returns>
    IMdmUser AddNew(string name, string fileVersion, string comment);

    /// <summary>
    ///     移除指定索引的用户对象。
    /// </summary>
    /// <param name="index">指定索引</param>
    void RemoveAt(int index);
}

/// <summary>
///     用户保存信息
/// </summary>
public interface ISaveLog
{
    /// <summary>
    ///     保存日期和时间
    /// </summary>
    DateTime Date { get; }

    /// <summary>
    ///     保存时的MDM文档版本
    /// </summary>
    string MdmFileVersion { get; }

    /// <summary>
    ///     存储计数
    /// </summary>
    int SaveCount { get; }

    /// <summary>
    ///     选中的版本集合名
    /// </summary>
    string VersionSetName { get; }

    /// <summary>
    ///     用户名。
    /// </summary>
    string UserName { get; }

    /// <summary>
    ///     当前存储记录中的所有用户
    /// </summary>
    IMdmUsers Users { get; }
}

/// <summary>
///     MDM文档中的用户存档记录集合。
/// </summary>
public interface ISaveLogs : IEnumerable<ISaveLog>
{
    /// <summary>
    ///     当前集合中<see cref="ISaveLog" />对象的个数。
    /// </summary>
    int Count { get; }

    /// <summary>
    ///     获取指定索引的存档信息
    /// </summary>
    /// <param name="index"></param>
    /// <returns></returns>
    ISaveLog this[int index] { get; }

    /// <summary>
    ///     向集合末尾添加一个新的记录对象。
    /// </summary>
    /// <returns></returns>
    ISaveLog AddNew(string fileVersion, int saveCount = 0);

    /// <summary>
    ///     清空记录列表。
    /// </summary>
    void Clear();
}